#ifndef LABYRINTHTEST_H_
#define LABYRINTHTEST_H_

#include <cppunit/extensions/HelperMacros.h>

class LabyrinthTest: public CppUnit::TestFixture {
	CPPUNIT_TEST_SUITE(LabyrinthTest);
	CPPUNIT_TEST(testPositionOnEdge);
	CPPUNIT_TEST(testPositionNotOnEdge);
	CPPUNIT_TEST(testOutputOperator);
	CPPUNIT_TEST(testGetCell);
	CPPUNIT_TEST(testSetCell);
	CPPUNIT_TEST(testGetCellThrowsOutOfRangeExceptionWhenXLessThan0);
	CPPUNIT_TEST(testGetCellThrowsOutOfRangeExceptionWhenXGreaterThanWIDTH);
	CPPUNIT_TEST(testGetCellThrowsOutOfRangeExceptionWhenYLessThan0);
	CPPUNIT_TEST(testGetCellThrowsOutOfRangeExceptionWhenYGreaterThanHEIGHT);
	CPPUNIT_TEST(testSetCellThrowsOutOfRangeExceptionWhenXLessThan0);
	CPPUNIT_TEST(testSetCellThrowsOutOfRangeExceptionWhenXGreaterThanWIDTH);
	CPPUNIT_TEST(testSetCellThrowsOutOfRangeExceptionWhenYLessThan0);
	CPPUNIT_TEST(testSetCellThrowsOutOfRangeExceptionWhenYGreaterThanHEIGHT);
	CPPUNIT_TEST(testSetCellThrowsInvalidArgumentException);
	CPPUNIT_TEST_SUITE_END();

public:
	void setUp();
	void tearDown();

	void testPositionOnEdge();
	void testPositionNotOnEdge();
	void testOutputOperator();
	void testGetCell();
	void testSetCell();
	void testGetCellThrowsOutOfRangeExceptionWhenXLessThan0();
	void testGetCellThrowsOutOfRangeExceptionWhenXGreaterThanWIDTH();
	void testGetCellThrowsOutOfRangeExceptionWhenYLessThan0();
	void testGetCellThrowsOutOfRangeExceptionWhenYGreaterThanHEIGHT();
	void testSetCellThrowsOutOfRangeExceptionWhenXLessThan0();
	void testSetCellThrowsOutOfRangeExceptionWhenXGreaterThanWIDTH();
	void testSetCellThrowsOutOfRangeExceptionWhenYLessThan0();
	void testSetCellThrowsOutOfRangeExceptionWhenYGreaterThanHEIGHT();
	void testSetCellThrowsInvalidArgumentException();
};

#endif /* LABYRINTHTEST_H_ */
